使用者在瀏覽網頁時,Web Server會產生Log,當網頁掛掉時,勢必需要去查看Log作分析,導致網站發生掛掉的源頭,所以網站的Log需要保存完善。
反觀,Kubernetes裡的Pod,因為Pod的生命週期,當Pod突然發生一些事情掛掉而release時,原先在Pod上產生的新資料時,就會跟著一起消失,所以需要切割或掛載Storage空間給予Pod做存放資料,當Pod掛掉而release時,資料還可以被保存下來。
實際演練會使用Persistent Volume(PV) & Persistent Volume Claim(PVC)使用手動去建立這兩個元件,則稱之為Static,先來看以下圖片,來了解PV & PVC的關係:
PV可以想像成一顆USB硬碟,有儲存空間,而去分配實際想要的硬體空間。所以PV擁有一個獨立的儲存空間
PVC可以想像成USB驅動程式,給予硬碟和系統的溝通橋樑,並已對裝置進行訪問,以及驅動程式會佔據一點點的硬碟空間(系統資源)。所以PVC可以對PV進行存取模式的設定,相對的PVC也需要儲存空間
以下會進行實際演練
apiVersion: v1
kind: PersistentVolume
metadata:
name: mypv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Delete
storageClassName: mypv
hostPath:
path: "/mnt/mypv"
storage: 設定儲存空間
accessModes: 訪問模式,有以下三種模式:
persistentVolumeReclaimPolicy: PV刪除後的回收策略,有以下三種方式:
PVC只需要設定訪問模式以及初始的儲存空間
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
resources:
requests:
storage: 1Gi
accessModes:
- ReadWriteMany
storageClassName: mypv
上面圖片所呈現的關係,需要了解,在volume做參數設定,就不會搞混
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deploy
spec:
replicas: 2
selector:
matchLabels:
name: itdemo
template:
metadata:
labels:
name: itdemo
spec:
containers:
- name: itdemo
image: johnson860312/awswebdb
resources:
limits:
memory: "256Mi"
cpu: "128m"
ports:
- containerPort: 80
volumeMounts:
- mountPath: "/var/www/html"
name: deploy-mount
volumes:
- name: deploy-mount
persistentVolumeClaim:
claimName: mypvc
volumeMounts:
使用port-forward access到pod
PV與PVC建立連結
PVC與Pod成功建立連結。Status: Bound
原先在"/var/www/html"底下有資料但這裡volumeMount的方式會直接覆蓋過去
Node上的資料夾成功創建
在Pod建立一個測試web,驗證volume是共享
在Node上建立測試web,驗證儲存空間是共享
明天會介紹和實作在EKS上建立EBS